﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Helper;

namespace SIMCObjetoNegocio
{
    public partial class PortafolioDeUsuario
    {
        public int Id { get; set; }
        public int IdPortafolio { get; set; }
        /// <summary>
        /// solicitado, aprobado(activo), inactivo, rechazado
        /// </summary>
        public EstadoPortafolioUsuario Estado
        {
            get
            {
                return EstadoPortafolioUsuarioFactory.Crear(_Estado);
            }
            set
            {
                _Estado = value.ToString();
            }
        }
        /// <summary>
        /// Permisos que para usuarios externos deben estar en tabla nueva y para los internos sera un derivado de un metodo configurable.
        /// </summary>
        public List<PortafolioPermiso> ListaPermisos { get; set; }
        //IList<Notificacion> ListaNotificaciones;//Tipo de evento que amerita notificacion y lista de destinatarios.
        /// <summary>
        /// Fecha UltimoAcceso (actualizado automáticamente)
        /// </summary>
        public DateTime? UltimoAcceso { get; set; }
        /// <summary>
        /// Cambio al permiso. IdUsuarioQueHizocambios en este portafolio (actualizado automáticamente)
        /// </summary>
        public int? IdUsuarioUltimoCambio { get; set; }
        /// <summary>
        /// Fecha del ultimo cambio en algun permiso asociado a este objeto.
        /// </summary>
        public DateTime? FechaUltimoCambio { get; set; }
        public DateTime FechaCreacion { get; set; }
        public int? UsuarioCreador { get; set; }
        public string Alias { get; set; }
        public string UserName { get; set; }

        public void Aprobar(IPortafolioUsuarioState p_Estado)
        {
            p_Estado.Aprobar();
        }

        public void Solicitar(IPortafolioUsuarioState p_Estado)
        {
            p_Estado.Solicitar();
        }

        public void Rechazar(IPortafolioUsuarioState p_Estado)
        {
            p_Estado.Rechazar();
        }

        public void Inactivar(IPortafolioUsuarioState p_Estado)
        {
            p_Estado.Inactivar();
        }

        public void Renovar(IPortafolioUsuarioState p_Estado)
        {
            p_Estado.Renovar();
        }

        public void VerificarPermisos()
        {
            Check.Argument.IsNotNull(this.ListaPermisos, "Debe seleccionar al menos un permiso");
        }
    }

    public partial class PortafolioDeUsuario
    {
        public string _Estado { get; set; }
    }
}
